当Fls中发生ECC故障时的处理方法(S32K146) 您所在的位置:网站首页 Flash 3好吗 当Fls中发生ECC故障时的处理方法(S32K146)

当Fls中发生ECC故障时的处理方法(S32K146)

2024-06-29 05:40| 来源: 网络整理| 查看: 265

学习目标:

1、模拟FLASH ECC故障 2、解决ECC故障

学习内容:

1、模拟FLASH ECC故障 当Flash内容被意外篡改时(电磁干扰、低压写入),再去对flash进行如下操作时,就会产生ECC故障 在这里插入图片描述 发生该故障后,想要根据实际环境复现相当不容易,这个时候我们可以通过Fls_Write()函数向Flash同一个地址,连续写入不同的数据来模拟ECC故障的产生,该方法实测有效。 补充:实际测试的时候发现不是所有sector重复写入时都能成功复现ECC故障,像保存cluster头信息的扇区写入时能更有效复现该故障。 2、解决ECC故障 根据NXP官方文档《AN12522》3.2 不可纠正错误的ECC,当Flash中产生ECC故障时 多bit错误和bus fasult错误都会导致程序进入HardFault_Handler,这也就意味着S32K146不能像S32K3x那样通过关闭ECC中断使能位来关闭该故障。 在这里插入图片描述 这个时候就只能在HardFault_Handler()中添加程序来处理该故障。

void HardFault_Handler(void) { //以下代码获取跑飞前的寄存器 __asm__("MOVS R0, #4"); __asm__("MOV R1, LR"); __asm__("TST R1, R0"); // Test LR (EXC_RETURN[2]) __asm__("ITE NE"); __asm__("MRSNE R1, PSP"); // EXC_RETURN[2] = 1 PSP __asm__("MRSEQ R1, MSP"); // EXC_RETURN[2] = 0 MSP __asm__("LDR R0, =stack_pointer"); __asm__("STR R1, [R0]"); // Store MSP or PSP into stack_pointer p_stack_frame = (uint32_t*)(stack_pointer+8); program_counter = p_stack_frame[6]; // holds the address of the instruction that has caused the exception //R0,R1,R2,R3,R12,LR,PC,PSR R_reg[0] = p_stack_frame[0]; R_reg[1] = p_stack_frame[1]; R_reg[2] = p_stack_frame[2]; R_reg[3] = p_stack_frame[3]; R_reg[4] = p_stack_frame[4]; R_reg[5] = p_stack_frame[5]; R_reg[6] = p_stack_frame[6]; R_reg[7] = p_stack_frame[7]; if((IP_FTFC->FERSTAT & (0x01


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有